/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.bean;

import ec.edu.espe.ccsoft.mantenimiento.modelos.DetallePedido;
import ec.edu.espe.ccsoft.mantenimiento.modelos.DetallePedidoPK;
import ec.edu.espe.ccsoft.mantenimiento.modelos.Pedido;
import ec.edu.espe.ccsoft.mantenimiento.modelos.Repuesto;
import ec.edu.espe.ccsoft.mantenimiento.servicios.DetallePedidoServicio;
import ec.edu.espe.ccsoft.mantenimiento.servicios.PedidoServicio;
import ec.edu.espe.ccsoft.mantenimiento.servicios.RepuestoServicio;
import ec.edu.espe.ccsoft.mantenimiento.utils.ManejoAcciones;
import ec.edu.espe.ccsoft.mantenimiento.utils.Mensajes;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Gerardo
 */
@ManagedBean
@ViewScoped
public class DetallePedidoBean extends ManejoAcciones implements Serializable {

    @EJB
    private DetallePedidoServicio detallePedidoServicio;
    @EJB
    private RepuestoServicio repuestoServicio;
    @EJB
    private PedidoServicio pedidoServicio;

    private List<DetallePedido> detallesPedidos;

    private Pedido pedido;
    private List<Pedido> pedidos;

    private DetallePedido detallePedido;
    private List<DetallePedido> detallesPedido;

    private Repuesto repuesto;
    private List<Repuesto> repuestosB;
    private List<Repuesto> repuestosSelecionados;
    private Mensajes mensaje;

    private String nombreRepuesto;
    private int cantidad;

    @PostConstruct
    public void init() {
        pedidos = pedidoServicio.FindAllPedidos();
        detallesPedido = new ArrayList();
        detallePedido = new DetallePedido();

        this.pedido = new Pedido();
        this.pedido.setFechaCreacion(new Date());
        //int codigo;
        // codigo = pedidoServicio.buscarFacturaByFecha() + 1;
        //this.pedido.setCodPedido(codigo);
        this.detallesPedidos = new ArrayList<>();
        this.repuestosSelecionados = new ArrayList<>();

        mensaje = new Mensajes();
    }

    public void cargarNuevo() {
        pedido = new Pedido();
        super.nuevoRegistro();
    }

    public void cargarModificar() {
        super.modificarRegistro();
        detallesPedidos = detallePedidoServicio.findByPedido(pedido);        
    }

    public void cargarDetalle() {
        super.detallesRegistro();
    }

    public void cargarNuevoDetalle() {
        detallePedido = new DetallePedido();
    }

    public void finalizarManteniminto() {
        pedido.setEstado(false);
        pedido.setFechaEntrega(Calendar.getInstance().getTime());
        pedidoServicio.UpdatePedido(pedido);
        pedidos.remove(pedido);

        mensaje.addMessageSuccefull("Información", "El Pedido ha sido finalizado con éxito");
        RequestContext.getCurrentInstance().execute("PF('dlDetalleVar').hide();");
        RequestContext.getCurrentInstance().update("@form");
    }

//    public void cargarRepuestos() {
//        repuestosB = repuestoServicio.findRepuestoByNombrePattern(this.nombreRepuesto);
//        super.nuevoRegistro();
//    }
    public void guardar() {
        try {

            pedido.setEstado(true);
            pedido.setFechaCreacion(Calendar.getInstance().getTime());
            pedido.setFechaPedido(Calendar.getInstance().getTime());
            
            pedidoServicio.CreatePedidos(pedido);
            detallePedidoServicio.CreateDetallePedido(detallesPedidos);

           // this.pedidoServicio.CreatePedidos(pedido);

            mensaje.addMessageSuccefull("Información", "El Pedido ha sido creada con éxito");
            RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
            RequestContext.getCurrentInstance().update("@form");
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al crear el Pedido" + e.getMessage());
        }

    }

    public void agregarDetalle() {        
        detallePedido.setEstado(true);
        
        detallePedido.setFechaCreacion(Calendar.getInstance().getTime());
        detallePedido.setPrecioUnitario(detallePedido.getRepuesto().getCosto());
        detallePedido.setPedido(pedido);
        detallePedido.setDetallePedidoPK(new DetallePedidoPK(pedido.getCodPedido(), detallePedido.getRepuesto().getCodRepuesto()));

        detallesPedidos.add(detallePedido);
        detallePedidoServicio.createPedido(detallePedido);

        mensaje.addMessageSuccefull("Información", "El detalle ha sido agregado con éxito");
        RequestContext.getCurrentInstance().execute("PF('dlEleccionVar').hide();");
        RequestContext.getCurrentInstance().update("@form");
        
    }

    public void modificar() {
        try {
            pedido.setFechaEntrega(Calendar.getInstance().getTime());
            pedidoServicio.UpdatePedido(pedido);
            if (!pedido.getEstado()) {
                pedidos.remove(pedido);
                mensaje.addMessageSuccefull("Información", "El Pedido ha sido eliminado con éxito");
            } else {
                mensaje.addMessageSuccefull("Información", "El Pedido ha sido modificado con éxito");
            }
            RequestContext.getCurrentInstance().execute("PF('dlDialogVar').hide();");
            RequestContext.getCurrentInstance().update("@form");
        } catch (Exception e) {
            mensaje.addMessageError("Error", "Error al modificar el Pedido " + e.getMessage());
        }
    }

    public List<Pedido> getPedidos() {
        return pedidos;
    }

    public void setPedidos(List<Pedido> pedidos) {
        this.pedidos = pedidos;
    }

    public DetallePedido getDetallePedido() {
        return detallePedido;
    }

    public void setDetallePedido(DetallePedido detallePedido) {
        this.detallePedido = detallePedido;
    }

    public List<DetallePedido> getDetallesPedido() {
        return detallesPedido;
    }

    public void setDetallesPedido(List<DetallePedido> detallesPedido) {
        this.detallesPedido = detallesPedido;
    }

    public List<DetallePedido> getDetallesPedidos() {
        return detallesPedidos;
    }

    public void setDetallesPedidos(List<DetallePedido> detallesPedidos) {
        this.detallesPedidos = detallesPedidos;
    }

    public Pedido getPedido() {
        return pedido;
    }

    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    public Repuesto getRepuesto() {
        return repuesto;
    }

    public void setRepuesto(Repuesto repuesto) {
        this.repuesto = repuesto;
    }

    public List<Repuesto> getRepuestosB() {
        return repuestosB;
    }

    public void setRepuestosB(List<Repuesto> repuestosB) {
        this.repuestosB = repuestosB;
    }

    public List<Repuesto> getRepuestosSelecionados() {
        return repuestosSelecionados;
    }

    public void setRepuestosSelecionados(List<Repuesto> repuestosSelecionados) {
        this.repuestosSelecionados = repuestosSelecionados;
    }

    public Mensajes getMensaje() {
        return mensaje;
    }

    public void setMensaje(Mensajes mensaje) {
        this.mensaje = mensaje;
    }

    public String getNombreRepuesto() {
        return nombreRepuesto;
    }

    public void setNombreRepuesto(String nombreRepuesto) {
        this.nombreRepuesto = nombreRepuesto;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

}
